Backend - V0
Documentação do Sistema Dockerizado
1. Dockerfile
O Dockerfile é usado para criar uma imagem Docker para o backend, que é uma API desenvolvida em Python com FastAPI e Prisma.
- A imagem base utilizada é o Python 3.8 em sua versão slim para otimizar o espaço.
- O diretório de trabalho dentro do contêiner é definido para /app.
- O arquivo requirements.txt é copiado para o contêiner, e as dependências Python são instaladas a partir dele.
- Todo o conteúdo do diretório atual é copiado para o contêiner.
- O cliente Prisma é gerado com base no schema definido.
- As migrações do Prisma são executadas para configurar o banco de dados com o schema atual.
2. docker-compose.yml
O arquivo docker-compose.yml define e executa múltiplos serviços Docker, permitindo a construção e execução dos contêineres do backend e do banco de dados.
Serviços:
- backend:
- O serviço backend usa a imagem Docker construída para o backend.
- O contêiner do backend é nomeado como demeter-api.
- A porta 8000 do contêiner é mapeada para a mesma porta no host, permitindo o acesso à API.
- As variáveis de ambiente são carregadas a partir de um arquivo .env.
- O diretório de código-fonte do host é mapeado para o diretório de trabalho no contêiner, permitindo que alterações no código sejam refletidas sem necessidade de reconstrução da imagem.
- O serviço é iniciado usando o Uvicorn, com hot-reload ativado.
- O contêiner é configurado para reiniciar automaticamente em caso de falha.
- O serviço depende do banco de dados, garantindo que o backend só inicie após o banco estar disponível.
- db:
- O serviço db constrói uma imagem Docker para o banco de dados PostgreSQL.
- O contêiner do banco de dados é nomeado como postgres.
- As variáveis de ambiente configuram o usuário, a senha e o nome do banco de dados.
- A porta 5432 do contêiner é mapeada para a mesma porta no host, permitindo o acesso ao banco de dados.
Documentação da API
Introdução
Esta API foi desenvolvida utilizando FastAPI, oferecendo endpoints para operações básicas como leitura de itens e upload de imagens. A API é projetada para ser leve e fácil de usar, com funcionalidades essenciais para manipulação de dados e arquivos.
Endpoints
- GET
/
- Descrição: Endpoint raiz que retorna uma mensagem de boas-vindas.
- Resposta:
- Status: 200 OK
- Corpo da resposta:
{"Hello": "World"}
- GET
/items/{item_id}
- Descrição: Retorna o ID do item solicitado e um parâmetro opcional de consulta.
- Parâmetros:
item_id
(int): ID do item a ser retornado.q
(opcional, str): Parâmetro de consulta adicional.
- Resposta:
- Status: 200 OK
- Corpo da resposta:
{"item_id": item_id, "q": q}
- POST
/upload
- Descrição: Endpoint para upload de imagens. A imagem enviada será salva em um diretório local.
- Parâmetros:
- image (UploadFile): Arquivo de imagem a ser carregado.
- Resposta:
- Status: 200 OK (sucesso)
- Corpo da resposta:
{"info": "file 'filename' saved at 'path/to/file'"}
onde filename é o nome do arquivo carregado e path/to/file é o local onde ele foi salvo.
- Status: 500 Internal Server Error (em caso de falha)
- Corpo da resposta: Detalhes do erro ocorrido.
- Configuração
- Diretório de Upload
- As imagens carregadas através do endpoint /upload são salvas em um diretório local especificado por UPLOAD_DIRECTORY.
- Caso o diretório especificado não exista, ele será criado automaticamente quando a API for iniciada.
Execução da API
A API pode ser executada utilizando Uvicorn. Por padrão, ela será iniciada no host 0.0.0.0 e porta 8000, com o modo de recarga automática ativado para facilitar o desenvolvimento.